package my.maven.project;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.text.MessageFormat;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

public class MathCalcClass {

	
	public static void main(String[] args) {
		
//		for (int i = 100; i < 2000; i+=10) {
//			System.out.println(MessageFormat.format("{0} -- {1}", i,i>>8) );
//		}
		
//		次方： 
//		Math.pow(3,4)=81  
//		开次方 
//		Math.pow(81.0, 1.0/4)=3
		
//		System.out.println(256 >> 8);
//		System.out.println(1024 >> 8); 
		
//		for (int i = 2; i <= Math.pow(2,10); i *= 2) {
//			System.out.println(MessageFormat.format("{0} -- {1} -- {2}", i,Integer.toBinaryString(i),i>>8) );
//		}
		
//		将整形转成十六进制的数 
//		String s = Integer.toHexString(1024);   //18输出结果12
//		System.out.println(s);
		
//		int numb = 256;
//		System.out.println(MessageFormat.format("{0} -- {1}", decimalToBinary(numb), binaryToDecimal( decimalToBinary(numb))) );
		
		yasuo();
	}
	
	   /**
	    * @Description:	十进制转换成二进制 ()
	    * @param decimalSource
	    * @return String
	    */
	    public static String decimalToBinary(int decimalSource) {
	    	BigInteger bi = new BigInteger(String.valueOf(decimalSource));	//转换成BigInteger类型
	    	return bi.toString(2);	//参数2指定的是转化成X进制，默认10进制
	    }
	    
	   /**
	    * @Description:	二进制转换成十进制 
	    * @param binarySource
	    * @return int
	    */
	    public static int binaryToDecimal(String binarySource) {
	    	BigInteger bi = new BigInteger(binarySource, 2);	//转换为BigInteger类型
	    	return Integer.parseInt(bi.toString());		//转换成十进制
	    } 
	    
	    
	   public static void  yasuo(){
	        try
	        {
	            String str = "中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中"
	                         + "中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中"
	                         + "中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中"
	                         + "中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中"
	                         + "中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中"
	                         + "中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中中国中国中";
	            String comp = compress(str);
	            System.out.println(str.length());
	            System.out.println(comp.length());
	            String umComp = uncompress(comp);
	            System.out.println(umComp);
	        }
	        catch (IOException e)
	        {
	            e.printStackTrace();
	        }
	    }
	     
	     // 压缩
	      public static String compress(String str) throws IOException {
	        if (str == null || str.length() == 0) {
	          return str;
	        }
	        ByteArrayOutputStream out = new ByteArrayOutputStream();
	        GZIPOutputStream gzip = new GZIPOutputStream(out);
	        gzip.write(str.getBytes());
	        gzip.close();
	        return out.toString("ISO-8859-1");
	      }
	     
	      // 解压缩
	      public static String uncompress(String str) throws IOException {
	        if (str == null || str.length() == 0) {
	          return str;
	        }
	        ByteArrayOutputStream out = new ByteArrayOutputStream();
	        ByteArrayInputStream in = new ByteArrayInputStream(str
	            .getBytes("ISO-8859-1"));
	        GZIPInputStream gunzip = new GZIPInputStream(in);
	        byte[] buffer = new byte[256];
	        int n;
	        while ((n = gunzip.read(buffer)) >= 0) {
	          out.write(buffer, 0, n);
	        }
	        // toString()使用平台默认编码，也可以显式的指定如toString("GBK")
	        return out.toString();
	      }
}
